#ifndef POCST_H
#define POCST_H

#include "includesT.h"
#include "ScanDataT.h"

Float atan3(Float y,Float x);
Float ShiftPosition(Float);
Float DetectorPosition(Float , Float, Float, Float );

Float DFint(const ScanData& , const std::vector<std::vector<std::vector<Float> > >&  , int , Float, Float );
void P1hilbert(ScanData& , int, int);
void P2compact(ScanData&, int , int);
void P3apriori(ScanData&, int , int);
void P4fproject(ScanData&, int , int);
void P5nonneg(ScanData&, int, int);
void backproj(ScanData&);
void backproj_ibp(ScanData&);
void prepare(ScanData&);
void P4prepare(ScanData&);


Float IndexPosition( const ScanData& , const int );
int PositionIndex(const ScanData&, const Float, bool);
bool isMissing(const ScanData& , const Float);
bool isHilbertKnown(const ScanData&, Float , Float, Float );
void project(ScanData&, const std::vector<std::vector<std::vector<Float> > >&, Float&, Float, Float, int, int, Float, Float, Float, bool);
void project(ScanData&, const std::vector<std::vector<std::vector<Float> > >&, Float&, Float, Float, int, int, Float, Float, Float, bool);
void project_ibp(ScanData&, const std::vector<std::vector<std::vector<Float> > >&, Float&, Float, Float, int, int, Float, Float, Float, bool);
#endif
